package com.shared.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Embedded;
import javax.persistence.Id;

import com.googlecode.objectify.Key;
import com.googlecode.objectify.annotation.Entity;
import com.shared.data.IData;
import com.shared.model.etat.EtatContrat;
import com.shared.utilitaire.Date;

@Entity
public class Contrat implements IData{
	
	@Id private Long key;
	
	private int identifiant;
	private Key<Compagnie> compagnie;
	private int identifiantCompagnie;
	@Embedded private Date dateEffet;
	private String fractionnement;
	@Embedded private Date echeance;
	@Embedded private Date dateComptabilisation;
	private String type;
	private Key<Produit> produit;
	@Embedded private List<Garantie> listeGarantie = new ArrayList<Garantie>();
	//@Embedded private EtatContrat etatContrat;
	//@Embedded private EtatContrat statut;
	private Key<EtatContrat> etatContrat;
	private Key<EtatContrat> statut;
	@Embedded private Date dateStatut;
	private Key<Apporteur> apporteur ;
	private Key<Apporteur> sousApporteur ;
	
	public Contrat() {
		// TODO Auto-generated constructor stub
	}
	
	public Contrat(int id, Key<Compagnie> c, int idC, Date dEffet, String f, Date e, Date dCompta, String t, Key<Produit> p, List<Garantie> lgar, Date dStatut ){
		
		identifiant = id ;
		compagnie = c ;
		identifiantCompagnie = idC ;
		dateEffet = dEffet ;
		dateStatut = dStatut ;
		fractionnement = f ;
		echeance = e ;
		dateComptabilisation = dCompta ;
		type = t ;
		produit = p ;
		listeGarantie = lgar ;
		dateStatut = dStatut ;		
	}
	
	public Contrat(int id, int idC, Date dEffet, String f, Date e, Date dCompta, String t, List<Garantie> lgar, Date dStatut ){
		
		identifiant = id ;		
		identifiantCompagnie = idC ;
		dateEffet = dEffet ;
		dateStatut = dStatut ;
		fractionnement = f ;
		echeance = e ;
		dateComptabilisation = dCompta ;
		type = t ;		
		listeGarantie = lgar ;
		dateStatut = dStatut ;		
	}
	
	public void setCompagnie(Compagnie compagnie){
		setCompagnie(new Key<Compagnie>(Compagnie.class, compagnie.getKey()));
	}
	
	public void setProduit(Produit produit){
		setProduit(new Key<Produit>(Produit.class, produit.getKey()));
	}
	
	public void setApporteur(Apporteur apporteur){
		setApporteur(new Key<Apporteur>(Apporteur.class, apporteur.getKey()));
	}
	
	public void setSousApporteur(Apporteur apporteur){
		setSousApporteur(new Key<Apporteur>(Apporteur.class, apporteur.getKey()));
	}
	
	public void addGarantie(Garantie g){
		listeGarantie.add(g);
	}
	
	public  Key<Compagnie>  getCompagnie() {
		return compagnie;
	}
	
	public Date getDateComptabilisation() {
		return dateComptabilisation;
	}
	
	public Date getDateEffet() {
		return dateEffet;
	}
	
	public Date getDateStatut() {
		return dateStatut;
	}
	
	public Date getEcheance() {
		return echeance;
	}
	
	public String getFractionnement() {
		return fractionnement;
	}
	
	public int getIdentifiant() {
		return identifiant;
	}
	
	public int getIdentifiantCompagnie() {
		return identifiantCompagnie;
	}
	
	public List<Garantie> getListeGarantie() {
		return listeGarantie;
	}
	
	public  Key<Apporteur>  getApporteur() {
		return apporteur;
	}
	
	public  Key<Apporteur>  getSousApporteur() {
		return sousApporteur;
	}
	
	public  Key<Produit> getProduit() {
		return produit;
	}
	
	public String getType() {
		return type;
	}
	
	public void setCompagnie(Key<Compagnie> compagnie) {
		this.compagnie = compagnie;
	}
	
	public void setDateComptabilisation(Date dateComptabilisation) {
		this.dateComptabilisation = dateComptabilisation;
	}
	
	public void setDateEffet(Date dateEffet) {
		this.dateEffet = dateEffet;
	}
	/*
	public EtatContrat getEtatContrat() {
		return etatContrat;
	}
	
	public void setEtatContrat(EtatContrat etatContrat) {
		this.etatContrat = etatContrat;
	}

	public EtatContrat getStatut() {
		return statut;
	}
	
	public void setStatut(EtatContrat statut) {
		this.statut = statut;
	}*/
	
	public void setDateStatut(Date dateStatut) {
		this.dateStatut = dateStatut;
	}
	
	public void setEcheance(Date echeance) {
		this.echeance = echeance;
	}
	
	
	
	public void setFractionnement(String fractionnement) {
		this.fractionnement = fractionnement;
	}

	
	
	public void setIdentifiant(int identifiant) {
		this.identifiant = identifiant;
	}
	
	public void setIdentifiantCompagnie(int identifiantCompagnie) {
		this.identifiantCompagnie = identifiantCompagnie;
	}
	
	public void setListeGarantie(List<Garantie> listeGarantie) {
		this.listeGarantie = listeGarantie;
	}
	
	public void setApporteur( Key<Apporteur>  apporteur) {
		this.apporteur = apporteur;
	}
	
	public void setSousApporteur( Key<Apporteur> sousApporteur) {
		this.sousApporteur = sousApporteur;
	}
	
	public void setProduit(Key<Produit> produit) {
		this.produit = produit;
	}
	
	public void setType(String type) {
		this.type = type;
	}
	
	
	
	
	/**
	 * @param key the key to set
	 */
	public void setKey(Long key) {
		this.key = key;
	}

	/**
	 * @return the key
	 */
	public Long getKey() {
		return key;
	}

	/**
	 * @param etatContrat the etatContrat to set
	 */
	public void setEtatContrat(Key<EtatContrat> etatContrat) {
		this.etatContrat = etatContrat;
	}

	/**
	 * @return the etatContrat
	 */
	public Key<EtatContrat> getEtatContrat() {
		return etatContrat;
	}

	/**
	 * @param statut the statut to set
	 */
	public void setStatut(Key<EtatContrat> statut) {
		this.statut = statut;
	}

	/**
	 * @return the statut
	 */
	public Key<EtatContrat> getStatut() {
		return statut;
	}
	
}
